package com.smedi.ismedi.constructionproject.core.application.query;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smedi.ismedi.constructionproject.core.application.command.ProjectCountQueryCommand;
import com.smedi.ismedi.constructionproject.core.application.command.ProjectListQueryCommand;
import com.smedi.ismedi.constructionproject.core.application.command.ProjectOneQueryCommand;
import com.smedi.ismedi.constructionproject.core.application.command.ProjectPageQueryCommand;
import com.smedi.ismedi.constructionproject.core.application.query.vo.ProjectBasicVo;
import com.smedi.ismedi.constructionproject.core.application.query.vo.ProjectDetailVo;
import com.smedi.ismedi.constructionproject.core.application.query.vo.ProjectWithDingVo;
import com.smedi.ismedi.constructionproject.core.domain.aggregatemodel.Project;
import com.smedi.ismedi.constructionproject.core.domain.aggregatemodel.ProjectBasic;
import com.smedi.ismedi.constructionproject.core.domain.aggregatemodel.ProjectWithDing;

import java.util.List;
import java.util.Map;

/**
 * @Author: xulinjun
 * @Date: 2021-6-11 9:23
 */
public interface ProjectBasicQueryService {
    IPage getProjectPagination(Long offset, Long pageSize, String projectName, String projectCode, String projectManager, Long hrOrganizationId, boolean containHrOrganizationChildren);

    ProjectBasicVo getProjectBasicView(Long projectId);

    List<ProjectBasicVo> getProjectBasicView(String provinceName);

    IPage getProjectManagementInfoPagination(Long offset, Long pageSize, String projectName, String projectCode, String projectManager, Long hrOrganizationId,String supervisionUnit, String projectStatus, String projectCategory, String contractDurationBegin, String contractDurationEnd);

    IPage getProjectManagementInfoPaginationForMobile(Long offset, Long pageSize, String projectName, String projectCode, String projectManager, Long hrOrganizationId,String supervisionUnit, String projectStatus, String projectCategory, String contractDurationBegin, String contractDurationEnd, String epcType);

    List<ProjectBasicVo> getAvailableProjectList();

    List<ProjectBasicVo> getAvailableProjectListWithToken();

    Map<Long, List<ProjectBasicVo>> getProjectTree();

    List<ProjectBasicVo> getProjectBasicListByHrOrganizationIds(List<Long> hrOrganizationIds);

    List<ProjectBasicVo> getQueryProjectBasicListByApp(String appSearch,List<Long> ids);

    List<ProjectBasicVo> getProjectBasicViewSimpleList(List<Long> projectIds);

    Project getProjectOne(ProjectOneQueryCommand projectOneQueryCommand);

    List<Project> getProjectList(ProjectListQueryCommand projectListQueryCommand);

    Page<ProjectDetailVo> getProjectDetailPage(ProjectPageQueryCommand projectPageQueryCommand);

    List<ProjectDetailVo> getProjectDetailList(ProjectListQueryCommand projectListQueryCommand);

    List<ProjectWithDingVo> getProjectVosByOrgId(Long orgId);

    ProjectWithDingVo getProjectWithDingVoById(Long id);

    Integer getProjectCount(ProjectCountQueryCommand projectCountQueryCommand);
}
